/**
 * 逻辑或 ||
 * 逻辑或操作符不一定返回布尔值
 * - 使用于两个布尔值返回布尔值
 */
console.log(true || false)

/**
 * 如果有操作数不是布尔值，则逻辑与遵循以下规则
 * ①如果第一个操作数是对象，则返回第一个操作数
 * ②如果第一个操作数求值为 false，则返回第二个操作数
 * ③如果两个操作数都是对象，则返回第一个操作数
 * ④如果两个操作数都是 null，则返回 null
 * ⑤如果两个操作数都是 NaN，则返回 NaN
 * ⑥如果两个操作数都是 undefined，则返回 undefined
 * 同样与逻辑与类似，逻辑或操作符也具有短路的特性。
 * 只不过对逻辑或而言，第一个操作数求值为true，第二个操作数就不会再被求值了
 */
let backupObj = {
  name: 'jack',
}
console.log(null || backupObj)
console.log(false || backupObj)

//使用场景
let preferredObj = { name: 'lucy' }
const obj = preferredObj || backupObj
console.log(preferredObj)
